package view.kasse;

import view.touchability.SkærmNumpad;
import control.SalgsController;
import java.awt.Graphics;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.sql.SQLException;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import model.Salg;
import utility.ImageToolbox;
import utility.PriceFormater;
import utility.DoubleRestrictionDocument;
import view.MainGUI;

/**
 *
 * @author Maja Gliese
 */
public class BetalingsPanel extends javax.swing.JPanel {

    private final MainGUI mainGUI;
    private final KassePanel kassePanel;
    private Salg aktivtSalg;
    private boolean udskriv;

    /**
     * Opretter nyt BetalingsPanel
     * @param mainGUI
     * @param kassePanel 
     */
    public BetalingsPanel(MainGUI mainGUI, KassePanel kassePanel) {
        initComponents();
        this.mainGUI = mainGUI;
        this.kassePanel = kassePanel;
        aktivtSalg = null;     
    }

    public void resetLabels() {
        if(aktivtSalg != null){
        totalBeløbTxt.setText(PriceFormater.formaterPrisTilString(aktivtSalg.getTotalBeløb()));
        }else{
            totalBeløbTxt.setText("");
        }
        beløbModtagetTxt.setText("0,00");   
        beløbModtagetTxt.requestFocus();
    }

    /**
     * Metoden sætter baggrunden på panelet med det kaldte billede
     * @param imageIcon 
     */
    public void setUltraBaggrund(ImageIcon imageIcon) {
        if(imageIcon != null){
        ULTRABAGGRUND.setIcon(imageIcon);
        ULTRABAGGRUND.repaint();
        }
        revalidate();
    }

    /**
     * Metoden beregner returbeløb ved at trække det aktive salgs totalbeløb fra det indtastede beløb, beløbet formateres til en String
     * og sættes i returTxt tekstfeltet
     */
    public void beregnReturBeløb() {
        int modtaget = PriceFormater.formaterPrisTilInt(beløbModtagetTxt.getText());
        returTxt.setText(PriceFormater.formaterPrisTilString(modtaget - aktivtSalg.getTotalBeløb()));
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jPanel4 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        beløbModtagetTxt = new javax.swing.JTextField();
        udskrivKvitteringLbl = new javax.swing.JLabel();
        udskrivKvitteringCheckBox = new javax.swing.JCheckBox();
        beløbModtagetlbl = new javax.swing.JLabel();
        afslutKnap = new javax.swing.JButton();
        returLbl = new javax.swing.JLabel();
        returTxt = new javax.swing.JTextField();
        totalBeløbLbl = new javax.swing.JLabel();
        totalBeløbTxt = new javax.swing.JTextField();
        fortrydKnap = new javax.swing.JButton();
        panelBaggrund = new javax.swing.JLabel();
        baggrund = new javax.swing.JLabel(){
            public void paint(Graphics g){
                ImageToolbox.drawImage(g, (ImageIcon) baggrund.getIcon(), 0, 0, 1000, 800);
            }
        };
        ULTRABAGGRUND = new javax.swing.JLabel(){
            public void paint(Graphics g){
                if (ULTRABAGGRUND.getIcon()!= null){
                    ImageToolbox.drawImage(g, (ImageIcon) ULTRABAGGRUND.getIcon(), 0, 0, ULTRABAGGRUND.getSize().width, ULTRABAGGRUND.getHeight());
                }
            }
        };

        jLabel1.setText("jLabel1");

        setFocusCycleRoot(true);
        setPreferredSize(new java.awt.Dimension(800, 610));
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                formComponentHidden(evt);
            }
            public void componentShown(java.awt.event.ComponentEvent evt) {
                formComponentShown(evt);
            }
        });

        jPanel4.setOpaque(false);
        jPanel4.setLayout(null);

        jPanel1.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));
        jPanel1.setOpaque(false);
        jPanel1.setLayout(null);

        beløbModtagetTxt.setDocument(new DoubleRestrictionDocument(9,beløbModtagetTxt));
        beløbModtagetTxt.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                beløbModtagetTxtKeyReleased(evt);
            }
        });
        jPanel1.add(beløbModtagetTxt);
        beløbModtagetTxt.setBounds(260, 80, 105, 30);

        udskrivKvitteringLbl.setText("Udskriv Kvittering: ");
        jPanel1.add(udskrivKvitteringLbl);
        udskrivKvitteringLbl.setBounds(60, 168, 130, 14);

        udskrivKvitteringCheckBox.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        udskrivKvitteringCheckBox.setOpaque(false);
        udskrivKvitteringCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                udskrivKvitteringCheckBoxActionPerformed(evt);
            }
        });
        jPanel1.add(udskrivKvitteringCheckBox);
        udskrivKvitteringCheckBox.setBounds(260, 160, 110, 40);

        beløbModtagetlbl.setText("Beløb modtaget: ");
        jPanel1.add(beløbModtagetlbl);
        beløbModtagetlbl.setBounds(60, 90, 166, 14);

        afslutKnap.setBackground(MainGUI.BUTTON_STANDARD_COLOR);
        afslutKnap.setText("Afslut Salg");
        afslutKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                afslutKnapActionPerformed(evt);
            }
        });
        jPanel1.add(afslutKnap);
        afslutKnap.setBounds(260, 210, 105, 39);

        returLbl.setText("Retur:");
        jPanel1.add(returLbl);
        returLbl.setBounds(60, 130, 100, 14);

        returTxt.setEditable(false);
        jPanel1.add(returTxt);
        returTxt.setBounds(260, 120, 105, 30);

        totalBeløbLbl.setText("Totalbeløb: ");
        jPanel1.add(totalBeløbLbl);
        totalBeløbLbl.setBounds(60, 50, 120, 14);

        totalBeløbTxt.setEditable(false);
        jPanel1.add(totalBeløbTxt);
        totalBeløbTxt.setBounds(260, 40, 105, 30);

        fortrydKnap.setBackground(MainGUI.BUTTON_STANDARD_COLOR);
        fortrydKnap.setText("Fortryd");
        fortrydKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fortrydKnapActionPerformed(evt);
            }
        });
        jPanel1.add(fortrydKnap);
        fortrydKnap.setBounds(60, 210, 105, 39);

        panelBaggrund.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/betalingsPanelOverlay.png"))); // NOI18N
        jPanel1.add(panelBaggrund);
        panelBaggrund.setBounds(0, 0, 430, 276);

        jPanel4.add(jPanel1);
        jPanel1.setBounds(50, 97, 430, 276);

        baggrund.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/baggrundOverlay.png"))); // NOI18N
        jPanel4.add(baggrund);
        baggrund.setBounds(0, 0, 800, 610);

        ULTRABAGGRUND.setOpaque(true);
        jPanel4.add(ULTRABAGGRUND);
        ULTRABAGGRUND.setBounds(0, 4, 800, 600);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, 610, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents

    private void fortrydKnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fortrydKnapActionPerformed
        mainGUI.showPage("KassePanel");
    }//GEN-LAST:event_fortrydKnapActionPerformed

    private void afslutKnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_afslutKnapActionPerformed
        if (udskriv == true) {
            Kvittering kvittering = new Kvittering(aktivtSalg);
            kvittering.setLocation(100 + 40, 90);
            kvittering.setSize(558, 650);
            kvittering.setVisible(true);
            PrinterJob job = PrinterJob.getPrinterJob();
            Printable doc = kvittering;
            job.setPrintable(doc);
            boolean accept = job.printDialog();
            if (accept) {
                try {
                    job.print();
                } catch (PrinterException ex) {
                    JOptionPane.showMessageDialog(this, "Fejl 1100 \nDer er sket en fejl i forbindelse med udskrivning. \n" + ex.getLocalizedMessage(), "PrinterFejl", 0);
                }
                kvittering.setVisible(false);
            }
        }
        try {
            SalgsController.getInstance().afslutSalg();
            SalgsController.getInstance().lavNytSalg();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(this, "Fejl 1010 \nFejl ved afslutning af det pågældende salg.\n" + ex.getLocalizedMessage(), "Databasefejl", 0);
        }
        kassePanel.opdaterKasseListeOgAktivtSalg();
        returTxt.setText("");   // Resetter de to TextFields efter at have afsluttet. 
        beløbModtagetTxt.setText("");
        mainGUI.showPage("KassePanel"); // Her viser vi kassePanelet
    }//GEN-LAST:event_afslutKnapActionPerformed

    private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
        aktivtSalg = SalgsController.getInstance().getAktivtSalg();
        SkærmNumpad.getInstance().setVisible(true);
        if (aktivtSalg != null) {
            resetLabels();
        }
        beløbModtagetTxt.selectAll();
    }//GEN-LAST:event_formComponentShown

    private void udskrivKvitteringCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_udskrivKvitteringCheckBoxActionPerformed
        udskriv = udskrivKvitteringCheckBox.isSelected();
    }//GEN-LAST:event_udskrivKvitteringCheckBoxActionPerformed

    private void beløbModtagetTxtKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_beløbModtagetTxtKeyReleased
        beregnReturBeløb();
    }//GEN-LAST:event_beløbModtagetTxtKeyReleased

    private void formComponentHidden(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentHidden
        SkærmNumpad.getInstance().setVisible(false);
        resetLabels();
    }//GEN-LAST:event_formComponentHidden


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel ULTRABAGGRUND;
    private javax.swing.JButton afslutKnap;
    private javax.swing.JLabel baggrund;
    private javax.swing.JTextField beløbModtagetTxt;
    private javax.swing.JLabel beløbModtagetlbl;
    private javax.swing.JButton fortrydKnap;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JLabel panelBaggrund;
    private javax.swing.JLabel returLbl;
    private javax.swing.JTextField returTxt;
    private javax.swing.JLabel totalBeløbLbl;
    private javax.swing.JTextField totalBeløbTxt;
    private javax.swing.JCheckBox udskrivKvitteringCheckBox;
    private javax.swing.JLabel udskrivKvitteringLbl;
    // End of variables declaration//GEN-END:variables
}
